package com.example.qxfw.common.util.FastjsonUtil;

import com.alibaba.fastjson.JSON;
import com.alibaba.fastjson.JSONArray;
import com.alibaba.fastjson.JSONObject;
import com.example.qxfw.common.util.JsonUtils;
import java.io.File;
import java.util.ArrayList;
import java.util.List;

/**
 * 测试读取json
 * 首先，我们从 features 数组中提取每个 feature 的 geometry，
 * 然后根据不同的 type，将坐标信息添加到 allCoordinates 列表中。
 * 最后，我们遍历 allCoordinates 列表，输出所有的坐标信息。
 */
public class test {
    public static void main(String[] args) {
        try {
            File file = new File("src/main/resources/file/玉林市.json");
            JSONObject jsonObject = JSON.parseObject(JsonUtils.readJSONFile(file));
            JSONArray features = jsonObject.getJSONArray("features");

            List<List<List<double[]>>> allCoordinates = new ArrayList<>();
            for (int i = 0; i < features.size(); i++) {
                JSONObject feature = features.getJSONObject(i);
                JSONObject geometry = feature.getJSONObject("geometry");
                String type = geometry.getString("type");
                JSONArray coordinates = geometry.getJSONArray("coordinates");

                // 根据不同类型提取坐标信息
                if ("Polygon".equals(type)) {
                    allCoordinates.addAll(JsonUtils.parsePolygonCoordinates(coordinates));
                } else if ("MultiPolygon".equals(type)) {
                    for (int j = 0; j < coordinates.size(); j++) {
                        JSONArray polygonCoordinates = coordinates.getJSONArray(j);
                        allCoordinates.addAll(JsonUtils.parsePolygonCoordinates(polygonCoordinates));
                    }
                }
                // 还可以处理其他类型，如Point、MultiPoint、LineString、MultiLineString等
            }

            // 输出所有坐标信息
            for (List<List<double[]>> coordinates : allCoordinates) {
                for (List<double[]> ring : coordinates) {
                    for (double[] point : ring) {
                        System.out.println("Latitude: " + point[1] + ", Longitude: " + point[0]);
                    }
                }
            }

            System.out.println("总坐标数字: " + JsonUtils.countCoordinates(allCoordinates));

            // 输出最大和最小 Latitude 和 Longitude
            double[] minPoint = JsonUtils.getMinLatitudeLongitude(allCoordinates);
            double[] maxPoint = JsonUtils.getMaxLatitudeLongitude(allCoordinates);
            System.out.println("最小 Latitude: " + minPoint[1] + ", 最小 Longitude: " + minPoint[0]);
            System.out.println("最大 Latitude: " + maxPoint[1] + ", 最大 Longitude: " + maxPoint[0]);
        } catch (Exception e) {
            e.printStackTrace();
        }
    }

}
